package com.exam.controller;

import com.exam.entity.*;
import com.exam.serviceimpl.FillQuestionServiceImpl;
import com.exam.serviceimpl.JudgeQuestionServiceImpl;
import com.exam.serviceimpl.MultiQuestionServiceImpl;
import com.exam.serviceimpl.PaperServiceImpl;
import com.exam.util.ApiResultHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 试卷管理控制器，负责处理与试卷相关的HTTP请求
 */
@RestController
public class PaperController {

    /**
     * 注入试卷服务实现类
     */
    @Autowired
    private PaperServiceImpl paperService;

    /**
     * 注入判断题服务实现类
     */
    @Autowired
    private JudgeQuestionServiceImpl judgeQuestionService;

    /**
     * 注入选择题服务实现类
     */
    @Autowired
    private MultiQuestionServiceImpl multiQuestionService;

    /**
     * 注入填空题服务实现类
     */
    @Autowired
    private FillQuestionServiceImpl fillQuestionService;

    /**
     * 查询所有试卷信息
     *
     * @return 所有试卷的ApiResult封装
     */
    @GetMapping("/papers")
    public ApiResult<PaperManage> findAll() {
        ApiResult res = ApiResultHandler.buildApiResult(200, "请求成功", paperService.findAll());
        return res;
    }

    /**
     * 根据试卷ID查询该试卷下的所有题目（选择题、填空题、判断题）
     *
     * @param paperId 试卷ID
     * @return 题目类型与题目列表的映射（1-选择题，2-填空题，3-判断题）
     */
    @GetMapping("/paper/{paperId}")
    public Map<Integer, List<?>> findById(@PathVariable("paperId") Integer paperId) {
        List<MultiQuestion> multiQuestionRes = multiQuestionService.findByIdAndType(paperId);   //选择题题库 1
        List<FillQuestion> fillQuestionsRes = fillQuestionService.findByIdAndType(paperId);     //填空题题库 2
        List<JudgeQuestion> judgeQuestionRes = judgeQuestionService.findByIdAndType(paperId);   //判断题题库 3
        Map<Integer, List<?>> map = new HashMap<>();
        map.put(1, multiQuestionRes);
        map.put(2, fillQuestionsRes);
        map.put(3, judgeQuestionRes);
        return map;
    }

    /**
     * 新增一条试卷与题目的关联信息
     *
     * @param paperManage 试卷题目关联对象
     * @return 添加结果
     */
    @PostMapping("/paperManage")
    public ApiResult add(@RequestBody PaperManage paperManage) {
        int res = paperService.add(paperManage);
        if (res != 0) {
            return ApiResultHandler.buildApiResult(200, "添加成功", res);
        }
        return ApiResultHandler.buildApiResult(400, "添加失败", res);
    }
}
